#include "Config.h"


Config::Config(std::string file)
: m_strConfigFile(file)
, m_strHost("127.0.0.1")
, m_iPort(4111)
{
  ifstream entrada(m_strConfigFile.c_str());

  if (!entrada.good())
  {
    std::cerr << "Error al abrir archivo " << m_strConfigFile << std::endl;
    exit(1);
  }

  obtenerDatos(entrada);

}


Config::~Config()
{

}

void Config::obtenerDatos(ifstream& entrada)
{

  char line[1024];
  memset(line, 0, 1024);
  bool bHost = false;
  bool bPort = false;
  bool bUP = false;
  bool bDOWN = false;
  bool bRIGHT = false;
  bool bLEFT = false;
  bool bENTER = false;
  bool bREPARAR = false;
  bool bSCROLLUP = false;
  bool bSCROLLDOWN = false;
  bool bACCION1 = false;
  bool bACCION2 = false;

  int valorUP,valorDOWN,valorRIGHT,valorLEFT,valorENTER,valorREPARAR,valorSCROLLUP,valorSCROLLDOWN,valorACCION1,valorACCION2;
  valorUP=valorDOWN=valorRIGHT=valorLEFT=valorENTER=valorSCROLLUP =valorSCROLLDOWN=valorREPARAR =valorACCION1 =valorACCION2 =0;

  while ( entrada.getline(line, 1024, '\n') != NULL)
  {
    char* p=line;

    while (*p == ' ') p++;

    if (*p == '#') continue;

    string temp((const char*)p);
    size_t found = temp.find("=");

    if (found != string::npos)
    {
       if (temp.substr(0, found) == "HOST")
       {
         m_strHost = temp.substr(found+1, temp.size());
         bHost = true;
       }

       if (temp.substr(0, found) == "PUERTO")
       {
         m_iPort = atoi(temp.substr(found+1, temp.size()).c_str());
         bPort = true;
       }

       if (temp.substr(0, found) == "UP")
       {
         valorUP = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorUP] = UP;
         bUP = true;
       }

       if (temp.substr(0, found) == "DOWN")
       {
         valorDOWN = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorDOWN] = DOWN;
         bDOWN = true;
       }

       if (temp.substr(0, found) == "RIGHT")
       {
         valorRIGHT = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorRIGHT] = RIGHT;
         bRIGHT = true;
       }

       if (temp.substr(0, found) == "LEFT")
       {
         valorLEFT = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorLEFT] = LEFT;
         bLEFT = true;
       }

       if (temp.substr(0, found) == "ENTER")
       {
         valorENTER = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorENTER] = ENTER;
         bENTER = true;
       }
      if (temp.substr(0, found) == "REPARAR")
       {
         valorREPARAR = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorREPARAR] = REPARAR;
         bREPARAR = true;
       }
      if (temp.substr(0, found) == "SCROLLUP")
       {
         valorSCROLLUP = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorSCROLLUP] = SCROLLUP;
         bSCROLLUP = true;
       }
      if (temp.substr(0, found) == "SCROLLDOWN")
       {
         valorSCROLLDOWN = atoi(temp.substr(found+1, temp.size()).c_str());
         m_mControles[valorSCROLLDOWN] = SCROLLDOWN;
         bSCROLLDOWN = true;
       }
      if (temp.substr(0, found) == "ACCION1")
             {
               valorACCION1 = atoi(temp.substr(found+1, temp.size()).c_str());
               m_mControles[valorACCION1] = ACCION1;
               bACCION1 = true;
             }
      if (temp.substr(0, found) == "ACCION2")
             {
               valorACCION2 = atoi(temp.substr(found+1, temp.size()).c_str());
               m_mControles[valorACCION2] = ACCION2;
               bACCION2 = true;
             }


    }
  }


  if( !bUP ){
	  valorUP = 273;
	  m_mControles[valorUP] = UP;
  }
  if( !bDOWN ){
	  valorDOWN=274;
	  m_mControles[valorDOWN] = DOWN;
  }
  if( !bLEFT ){
	  valorLEFT = 276;
	  m_mControles[valorLEFT] = LEFT;
  }
  if( !bRIGHT ){
	  valorRIGHT=275;
	  m_mControles[valorRIGHT] = RIGHT;
  }
  if( !bENTER ){
	  valorENTER=271;
	  m_mControles[valorENTER] = ENTER;
  }
 if( !bREPARAR ){
	  valorREPARAR=32;
	  m_mControles[valorREPARAR] = REPARAR;
  }
 if( !bSCROLLUP ){
	  valorSCROLLUP=97;
	  m_mControles[valorSCROLLUP] = SCROLLUP;
  }
 if( !bSCROLLDOWN ){
	  valorSCROLLDOWN=122;
	  m_mControles[valorSCROLLDOWN] = SCROLLDOWN;
  }
 if( !bACCION1 ){
	  valorACCION1=120;
	  m_mControles[valorSCROLLDOWN] = SCROLLDOWN;
  }
 if( !bACCION2 ){
	  valorACCION2=99;
	  m_mControles[valorSCROLLDOWN] = SCROLLDOWN;
  }


  cout << "Datos de configuracion:\n"
       << " Host   : " << m_strHost << " \tLeido desde archivo: " << (bHost ? "SI":"NO") << endl
       << " Puerto : " << m_iPort   << " \t\tLeido desde archivo: " << (bPort ? "SI":"NO") << endl
       << " UP : " << valorUP    << " \t\tLeido desde archivo: " << (bUP ? "SI":"NO") << endl
       << " DOWN : " << valorDOWN   << " \t\tLeido desde archivo: " << (bDOWN ? "SI":"NO") << endl
       << " RIGHT : " << valorRIGHT   << " \t\tLeido desde archivo: " << (bRIGHT ? "SI":"NO") << endl
       << " LEFT : " << valorLEFT   << " \t\tLeido desde archivo: " << (bLEFT ? "SI":"NO") << endl
       << " REPARAR : " << valorREPARAR   << " \t\tLeido desde archivo: " << (bREPARAR ? "SI":"NO") << endl
       << " ENTER : " << valorENTER   << " \t\tLeido desde archivo: " << (bENTER ? "SI":"NO") << endl
       << "-------------------------------------------------------------------------\n\n";

}

std::string Config::obtenerHost()
{
  return m_strHost;
}

int Config::obtenerPuerto()
{
  return m_iPort;
}

map<int,int> Config::obtenerControles()
{
  return m_mControles;
}





